﻿using Lufei_CaterBLL;
using Lufei_CaterModel;
using Lufei_CaterUI;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ItcastCater
{
    public partial class FrmMemmberInfo : Form
    {
        public FrmMemmberInfo()
        {
            //comboBox1.SelectedText = "请选择";
            InitializeComponent();
        }

        private void tabPage1_Click(object sender, EventArgs e)
        {

        }

        //创建业务逻辑层对象
        MemmverInfoBLL bll = new MemmverInfoBLL(); 
        private void FrmMemmberInfo_Load(object sender, EventArgs e)
        {
            //取消自动生成列
            dgvMemmber.AutoGenerateColumns = false;
            InitMemmberData();
           //取消第一行被选中
            dgvMemmber.SelectedRows[0].Selected = false;
            comboBox1.SelectedIndex = 0;
        }

        private void InitMemmberData()
        {
            //进行数据加载
            List<MemmberInfo> list = bll.GetMemmverInfo();
            dgvMemmber.AutoGenerateColumns = false;//禁止自动生成列
            //将集合赋值给DataGridView
            dgvMemmber.DataSource = list;
        }
        
        private void btnDelete_Click(object sender, EventArgs e)
        {
            //第Cells[0]绑定的第0个索引就是id
            int id= Convert.ToInt32(dgvMemmber.SelectedRows[0].Cells[0].Value);
            bool isDleted = bll.DeleteMemmberById(id);
            if (isDleted)
            {
                MessageBox.Show("删除成功");
                //todo 重写加载数据
                InitMemmberData();
            }
            else
            {
                MessageBox.Show("删除失败");
            }
        }

        private void btnAddMemMber_Click(object sender, EventArgs e)
        {
            FrmAdd frmadd = new FrmAdd();
            frmadd.FormClosed += Frmadd_FormClosed;//注册关闭事件
            frmadd.ShowDialog();
        }

        private void Frmadd_FormClosed(object sender, FormClosedEventArgs e)
        {
            InitMemmberData();
        }

        //修改数据的是很好 得使用事件来实现窗体传值
        //1.定义一个事件  事件类型  签名
        private event EventHandler My_EventHandler;

        private void btnUpdateMember_Click(object sender, EventArgs e)
        {

            //如果选择了行数据 ，在执行代码 否之直接return
            if (dgvMemmber.SelectedRows.Count > 0)
            {
                FrmUpdateMemmberInfo frm = new FrmUpdateMemmberInfo();//没有数据 但是要显示数据   方法专门给数据赋值

                //创建一个EventArgd的子类对象，将要修改的数据封装成一个模型，峰值给它的obj属性
                UpdateMemmberInfo<MemmberInfo> updateMemmberInfo = new UpdateMemmberInfo<MemmberInfo>();


                //获取要封装模型的行数据的ID，根据这个ID去数据库里面找对应的数据，然后封装成模型，进行传递
                //1.1获取id
                int id = Convert.ToInt32(dgvMemmber.SelectedRows[0].Cells[0].Value);
                //1.2读取数据
                MemmberInfo mi = bll.GetMemberInfoByID(id);

                updateMemmberInfo.obj = mi; //要求改的数据的模型

                //2.注册事件  ----》给事件赋值一个触发后要执行的方法
                My_EventHandler += frm.SetValue;

                //3.调用事件
                if (this.My_EventHandler != null)
                {
                    //sender：触发这个事件的对象  都是:this
                    //e:去做任何我们想要做的事情
                    this.My_EventHandler(this, updateMemmberInfo);
                }
                frm.FormClosed += Frm_FormClosed;
                frm.Show();//只要在show和showdiage 的时候才会执行load
            }
            else
            {
                MessageBox.Show("请选择数据");
                return;
            }
            
        }

        private void Frm_FormClosed(object sender, FormClosedEventArgs e)
        {
            InitMemmberData();
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(comboBox1.SelectedIndex.ToString()))
            {

                MessageBox.Show("请选择数据");
                return;
            }
            else if (comboBox1.SelectedIndex==0)
            {
                return;
            }
            else if (comboBox1.SelectedIndex == 1)//全选
            {
                InitMemmberData();
            }
            else if (comboBox1.SelectedIndex == 2)//回收站
            {
                //1.逻辑1   改造代码回收站和查询数据用一个也无所忌
                //2.逻辑2   重新写
                dgvMemmber.DataSource = bll.GetMemmberInfoWithDel();
            }
        }
    }
}
